package cn.lcl.demo.thread;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 *非安全的使用list通过原子性操作。
 */
public class ListHelper<E> {
    public List<E> list= Collections.synchronizedList(new ArrayList<>());//创建一个线程安全的list

    /**
     * 原子性操作，如果list不存在就添加元素x
     * @param x 需要添加的操作
     * @return
     */
    public synchronized boolean putIfAbsent(E x){
        boolean absent=!list.contains(x);
        if(absent)
            list.add(x);
        return absent;
    }

    /**
     * 线程安全的list原子性操作
     * @param x
     * @return
     */
    public boolean safePutIfAbsent(E x){
        synchronized (list){
            boolean absent=!list.contains(x);
            if(absent)
                list.add(x);
            return absent;
        }
    }
}
